package com.key.mapper;

import com.key.common.dto.StocktakingFormFindDTO;
import com.key.common.dto.StocktakingSurplusDTO;
import com.key.common.vo.StocktakingAssetsVO;
import com.key.common.vo.StocktakingFormDetailsVO;
import com.key.entity.Employee;
import com.key.entity.StocktakingForm;
import com.key.entity.StocktakingResult;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface StocktakingFormMapper {

    //################对stocktaking_form的操作################

    /**
     * 添加盘点单
     * @param stocktakingForm
     * @return
     */
    int insertStocktakingForm(StocktakingForm stocktakingForm);

    /**
     * 删除盘点单
     * @param sfNo
     * @return
     */
    int deleteStocktakingForm(@Param("sfNo") String sfNo);

    /**
     * 查询盘点单
     * @param stocktakingFormFindDTO
     * @return
     */
    List<StocktakingForm> selectStocktakingForm(StocktakingFormFindDTO stocktakingFormFindDTO);

    /**
     * 根据单号查询盘点单
     * @param sfNo
     * @return
     */
    StocktakingForm selectStocktakingFormBySfNo(@Param("sfNo") String sfNo);

    /**
     * 获取盘点单个数
     * @param stocktakingFormFindDTO
     * @return
     */
    int getStocktakingFormCount(StocktakingFormFindDTO stocktakingFormFindDTO);

    /**
     * 提交盘点，即将盘点单的状态设置为已完成
     * @param sfNo
     * @return
     */
    int submitStocktakingForm(@Param("sfNo") String sfNo);

    List<StocktakingForm> selectStocktakingFormList();


    //###############对stocktaking_result的操作###############

    /**
     * 添加盘点结果
     * @param stocktakingResult
     * @return
     */
    int insertStocktakingResult(StocktakingResult stocktakingResult);

    /**
     * 删除盘点结果
     * @param sfNo
     * @return
     */
    int deleteStocktakingResult(@Param("sfNo") String sfNo);

    /**
     * 修改盘点单内的资产盘点信息
     * @param stocktakingSurplusDTO
     * @return
     */
    int updateStocktakingResult(StocktakingSurplusDTO stocktakingSurplusDTO);

    /**
     * 查询盘点单下未盘点的资产个数
     * @param sfNo
     * @return
     */
    int getNotStocktakingCount(@Param("sfNo") String sfNo);

    //###############对stocktaking_emp的操作###############

    /**
     * 添加分配用户
     * @param employeeId
     * @param sfNo
     * @return
     */
    int insertStocktakingEmp(@Param("employeeId") Integer employeeId, @Param("sfNo") String sfNo);

    /**
     * 删除分配用户
     * @param sfNo
     * @return
     */
    int deleteStocktakingEmp(@Param("sfNo") String sfNo);

    //###################联表操作####################

    /**
     * 根据单号查询分配的用户
     * @param sfNo
     * @return
     */
    List<String> selectEmployeeNameBySfNo(@Param("sfNo") String sfNo);

    /**
     * 根据单号查询未完成员工的信息
     * @param sfNo
     * @return
     */
    List<Map<String, Object>> selectIncompleteEmployeesBySfNo(@Param("sfNo") String sfNo);

    /**
     * 根据单号查询盘点单下的资产
     * @param sfNo
     * @return
     */
    List<StocktakingAssetsVO> selectStocktakingAssetsBySfNo(@Param("sfNo") String sfNo, @Param("employeeId") Integer employeeId);

    /**
     * 根据单号查询盘点单下的资产数
     * @param sfNo
     * @return
     */
    int getStocktakingAssetsCountBySfNo(@Param("sfNo") String sfNo);

    /**
     * 删除盘点单内的指定资产
     * @param sfNo
     * @param assetsIds
     * @return
     */
    int deleteStocktakingSurplus(@Param("sfNo") String sfNo, @Param("assetsIds") List<Long> assetsIds);

}
